package com.lyun.service;


import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lyun.bo.FriendsBo;
import com.lyun.bo.LoginReginfoBo;
import com.lyun.bo.LoginReginfoHeadBo;
import com.lyun.dto.*;
import com.lyun.pojo.User;
import com.lyun.vo.*;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

public interface UserService extends IService<User> {
    /**
     * 通过手机号查询这个账号是否存在
     */
    User getByPhone(String phone);

    boolean createUser(User user);

    boolean updateData(User user);

    User getTodayBest(User user);

    PageVO<TodayBestVO> getRecommendationList(Long id, RecommendationDTO dto);

    List<User> getListByIds(List<Long> ids);

    PersonalVo getPersonalVoByIdAndUserId(long selfId, Long userId);

    List<PersonalVo> getRecommendUserList(Long id);

    /**
     * 验证验证码
     */
    LoginVerificationVo loginVerification(LoginVerificationDto dto);

    /**
     * 登录
     */
    void login(LoginDto loginDto) throws ClientException;

    boolean loginReginfo(LoginReginfoBo bo) throws ParseException;

    /**
     * 更新头像
     *
     * @param bo
     */
    void loginReginfoHead(LoginReginfoHeadBo bo) throws IOException;

    /**
     * 修改手机号，发送验证码
     *
     * @param phone
     */
    void sendVerificationCode(String phone) throws ClientException;

    /**
     * 获取用户粉丝信息，互相关注等用户
     *
     * @param bo
     * @return
     */
    PageVO<FriendsVo> getFriendsVoList(FriendsBo bo);

    /**
     * 获取三个数量
     * 1. 互相喜欢数
     * 2. 喜欢数
     * 3. 粉丝数
     *
     * @param userId
     * @return
     */
    LoveCountVo getCounts(Long userId);

    /**
     * 获取三个数量
     * 1. 互相喜欢数
     * 2. 喜欢数
     * 3. 粉丝数
     *
     * @param userId
     * @return
     */
    LoveCountVo getCountsStandby(Long userId);

    /**
     * 通过环信id查询用户
     *
     * @param huanxinId
     * @return
     */
    User findByHuanxin(String huanxinId);

    /**
     * 管理端获取用户列表
     *
     * @param dto
     * @return
     */
    PageVO<AdminUserVO> adminGetAll(AdminUserDTO dto);

    /**
     * 管理端更新用户状态
     * @param dto
     */
    void auditSmallVideo(AdminAbledUserDTO dto);

}
